package com.lazyfish.scss.util;
import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ResultSetToList {
    //定义静态方法，并根据泛型和反射，实现转换
    //注意：要求数据库的列名必须和JAVA实体类的属性名、类型完全一致
    @SuppressWarnings("unchecked")
	public static <T> List<T> resultSetToList(ResultSet rs,Class<T> cls) {
        //定义接收的集合
        List<T> list = new ArrayList<T>();
        //创建一个对象，方便后续反射赋值
        Object obj=null;
        try {
            while (rs.next()) {
                //利用反射获取，执行类的实例化对象
                obj = cls.newInstance();
                
                //利用反射，获取对象类信息中的所有属性
                Field [] fields = cls.getDeclaredFields();
                for(Field fd:fields){
                 		   //屏蔽权限
                 		   fd.setAccessible(true);
                  		  //为对象属性赋值
                 		 try {
                 			fd.set(obj,rs.getObject(fd.getName()));
						} catch (Exception e) {
							System.out.println(fd.getName()+"无法写入");
						}
                  		 
                    }
                list.add((T)obj);
                }
                //返回转换后的集合
                
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        //返回集合
        return list;
    }
}

